import gulp from 'gulp';

//gulp-if是在语句当中做if判断的
import gulpif from 'gulp-if';

//在gulp当中处理文件拼接的
import concat from 'gulp-concat';

//因为要解决依赖,所以我们使用webpack
import webpack from 'webpack';

//gulp-webpack
import gulpWebpack from 'webpack-stream';

//获得js文件
import named from 'vinyl-named';

//自动刷新的一个包
import livereload from 'gulp-livereload';

//文件流的处理
import plumber from 'gulp-plumber';

//文件重新命名
import rename from 'gulp-rename';

//文件压缩
import uglify from 'gulp-uglify';

//输出颜色相关
import {log,colors} from 'gulp-util';

//接收我们的文件命令参数
import args from './util/args';


//这个是JS代码引用减少工具
import UglifyJSPlugin from 'uglifyjs-webpack-plugin';



gulp.task('scripts',()=>{
    //我们要处理常规的错误逻辑
    //按照gulp的常规处理逻辑,每个pipe出错的时候,都会抛出异常
   return gulp.src(['app/js/index.js'])
       .pipe(plumber({
        errorHandle:function () {

        }
       }))
       .pipe(named())
       //使用webpack转换为es5
       .pipe(gulpWebpack({
           module:{
               loaders:[{
                   test:/\.js$/,
                   loader:'babel-loader'
               }]
           },
           plugins: [
               //这里我很聪明的使用了代码引用减少工具,明显的降低了代码的大小
               //记得要安装这个对应的包,然后再plugins当中new 一个
               //new UglifyJSPlugin()
           ]
       }),null,(err,stats)=>{
           log(`完成啦 '${colors.cyan('scripts')}'`,stats.toString({
               chunks:false
           }))
       })
       //先输出一个js文件
       .pipe(gulp.dest('server/public/js'))
       //然后重新命名,重新压缩,重新输出
       .pipe(rename({
           basename:'cp',
           extname:'.min.js'
       }))
       .pipe(uglify({compress:{properties:false},output:{'quote_keys':true}}))
       .pipe(gulp.dest('server/public/js'))

       //gulpif就是如果有这个watch这个选项的话,就执行livereload()函数
       //他的作用就是刷新
       .pipe(gulpif(args.watch,livereload()))
});















